const { Sequelize, Op } = require("sequelize"); // 导入 Op
const config = require("../config/config.json"); // 引入配置文件
const Article = require("./article"); // 导入 Article 模型
const Users = require("./users"); // 导入 Users 模型
const Cabinet = require("./cabinet"); // 导入 Cabinet 模型
const Sessions = require("./user_sessions"); // 导入 用户会话模型
const OrdersCunqu = require("./orders_cunqu"); // 导入 存取订单模型
const Message = require("./message"); // 导入 站内信模型
const OrdersPay = require("./orders_pay"); // 导入 充值订单模型
const CabinetsGrp = require("./cabinetsGrp"); // 导入 柜组模型
const AlarmRecord = require("./alarm_record"); // 导入 报警记录 模型

// 根据当前环境获取配置
const env = process.env.NODE_ENV || "development";
const dbConfig = config[env];

// 初始化 Sequelize 实例
const sequelize = new Sequelize(
  dbConfig.database, // 数据库名称
  dbConfig.username, // 用户名
  dbConfig.password, // 密码
  {
    host: dbConfig.host, // 主机地址
    dialect: dbConfig.dialect, // 数据库类型
    logging: console.log, // 启用日志
  }
);

/* 模型初始化 */
Article.init(sequelize);
Users.init(sequelize);
Cabinet.init(sequelize);
Sessions.init(sequelize);
OrdersCunqu.init(sequelize);
Message.init(sequelize);
OrdersPay.init(sequelize);
CabinetsGrp.init(sequelize);
AlarmRecord.init(sequelize);

// 导出包含所有模型的对象
const db = {
  Article,
  Users,
  Cabinet,
  Sessions,
  OrdersCunqu,
  Message,
  OrdersPay,
  CabinetsGrp,
  AlarmRecord,
  sequelize, // 导出 Sequelize 实例
  Sequelize, // 导出 Sequelize 类
  Op, // 导出 Op 供其他文件使用
};

// 注册模型关联
Object.values(db).forEach((model) => {
  if (model.associate) {
    model.associate(db); // 将 db 对象传递给 associate 方法
  }
});

module.exports = db;
